IEEE 802.11: fix Block Ack ADDBA transaction and agreement lifecycle - #1148
Open
mgonzalezlopezudc wants to merge 26 commits into
Open
mgonzalezlopezudc wants to merge 26 commits into
mgonzalezlopezudc wants to merge 26 commits into
Conversation
Comment on lines
+209
to
+213
| if (hasOtherGeneration) { | ||
| expiredSequenceNumbersMap[contextKey].insert(key.extendedSequenceNumber); | ||
| pruneExpiredSequenceNumbers(sequenceSpaceKey); | ||
| delete packet; | ||
| return nullptr; |
There was a problem hiding this comment.
🔴 BAR delivery crashes on rejected fragments
When addFragment rejects BAR-released fragments as generation-ambiguous, the delivery path stores null and dereferences it. The simulation aborts instead of dropping them.
Prompt for agents
BasicReassembly::addFragment can now reject and delete a fragment when another generation with the same raw sequence number exists, returning nullptr. RecipientQosMacDataService::controlFrameReceived unconditionally appends defragment(fragments) to defragmentedFrames and later dereferences every entry while handling a BAR. Update the BAR release path to treat a null reassembly result as a dropped/incomplete frame, mirroring dataFrameReceived, and preserve packet ownership and drop signaling correctly. Add coverage where BAR releases a complete reorder-buffer entry while BasicReassembly has conflicting generation state.
Was this helpful? React with 👍 or 👎 to provide feedback.
mgonzalezlopezudc
force-pushed
the
cleanup/fix-ieee80211-addba-transaction-minimal
branch
from
September 5, 2026 21:18
9b1f54c to
449a91a
Compare
mgonzalezlopezudc
had a problem deploying
to
sealed-source-change
September 5, 2026 21:19 — with
GitHub Actions
Failure
mgonzalezlopezudc
had a problem deploying
to
sealed-source-change
September 5, 2026 21:40 — with
GitHub Actions
Failure
mgonzalezlopezudc
force-pushed
the
cleanup/fix-ieee80211-addba-transaction-minimal
branch
7 times, most recently
from
September 14, 2026 21:15
5d095bf to
991f626
Compare
mgonzalezlopezudc
force-pushed
the
cleanup/fix-ieee80211-addba-transaction-minimal
branch
3 times, most recently
from
September 15, 2026 20:18
20de9fa to
f7e8d8c
Compare
Link-layer initialization may resolve peer interfaces by their configured addresses. Declare network-interface configuration as a prerequisite so these queries see initialized identities regardless of module declaration order. The physical-layer prerequisite remains in place. This ordering supplies the shared readiness contract used by simplified wireless association before network configuration. No fingerprint or statistical baseline is changed. The selected regression contract covers MacNonQos and MacQos, run 0, in examples/adhoc/qos, plus simplified association and AP lifecycle module tests in debug mode. Plan: plan/done/80211htcapop-refactor-v3.md Change: src.common.InitStages | behavior.change | test | ieee80211-htcapop-v3
Capability preparation previously depended on initialization broadcasts and mixed local PHY support with active BSS operation. Make the MAC prepare an idempotent profile through typed PHY contributors, and let management own accepted BSS transitions and simplified peer installation. Keep directional peer capabilities immutable and evaluate operation and HT eligibility separately. Publish committed MIB changes after management bookkeeping, guard state mutation, and replace modesetChanged listeners with explicit configuration providers. Prepare simplified associations before network configuration, independently of node declaration order. Keep simplified legacy STAs associated without accepting HT operation from an HT AP. Cover both declaration orders and shutdown/crash restart, while retaining BSS identity and channel and removing AP-side peer resources on stop. Migrate dependent consumers and regression fixtures together with the contracts. Document public API migration and the notification lifetime. Validation scope: debug build; 3 focused unit and 9 module cases covering capability preparation, provider wiring, association, lifecycle, beacon and channel updates; MacNonQos and MacQos run 0 fingerprints at 10s with unchanged tplx expectations. No fingerprint or statistical baseline changes. Plan: plan/done/80211htcapop-refactor-v3.md Change: src.ieee80211 | behavior.change | test expected whatsnew migration | ieee80211-htcapop-v3
Catalog-only consumers should not require capability preparation. Introduce a paired C++/NED IIeee80211ModeSetProvider contract and make MAC configuration extend it with the preparation operation used by management. ModeSetModuleBase now depends only on the read-only provider. Migrate the replacement-provider fixture to the narrow contract, removing its throwing preparation stub. Update architecture, migration guidance and release notes to identify the contract custom catalog providers implement. Validation of the integrated changes: debug build, 5 focused module tests, 3 unit tests and 18 unchanged Wi-Fi/Ethernet/VLAN/configurator fingerprint cases pass. Scoped architecture checks pass; interface checking reports only the existing AV-CONTRACT-02 bodies. No recorded baseline changes. Plan: plan/done/80211htcapop-refactor-v3.md Change: src.ieee80211 | refactor | whatsnew migration | ieee80211-htcapop-v3
Retain the previously accepted upstream graphical re-recording and refresh its three Block Ack-related tokens on the rebased master 7287f34. MacQosWithBlockAck, HCFfragblockack and txop/General produce the same values on master, this baseline-only commit and the pre-ADDBA checkpoint. Their nonvisual fingerprints already match master and remain unchanged here. Upstream 9a9e65c corrected BAR length and wire encoding after the earlier recording. These three graphical values are inherited drift, so they belong in this prerequisite rather than a later protocol change. The other seven previously accepted graphical updates are retained. The user approved this exact correction after the 2026-09-15 attribution report. Scoped debug verification uses run 0 and all declared ingredients. Change: tests.fingerprint | behavior.change | - | pr-1148-resolve-audit-findings
Record the authorized repair, evidence and reconstruction requirements before referring to this plan from implementation commits. Change: plan | behavior.add | - | pr-1148-resolve-audit-findings
Consumers need provider-selected predicate extraction and exactly one terminal departure at each logical queue boundary. Include prequeue filter rejection, nested composition and shared-buffer eviction without coupling generic queues to MAC transaction tags. Validation: diagnostic debug and release builds; 7 focused unit/module/queueing cases; 56 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.queueing | behavior.add+change | test migration whatsnew | pr-1148-resolve-audit-findings
DCF and HCF must retire pending-frame eligibility when the logical queue dequeues, removes or drops a frame. Subscribe to the complete queue departure contract and filter descendant emissions so each outcome is handled once. Validation: diagnostic debug and release builds; 8 focused unit/module/queueing cases; 56 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.change.fix | test | pr-1148-resolve-audit-findings
An ADDBA request can be rejected before transmission, retransmitted or answered late. Track its identity, transmission state and response deadline explicitly, match responses to the live transaction, and restore eligible data after terminal failure. A real HCF/RED regression covers rejection before enqueue. Recipient responses echo the request token, completing the wire contract required by originator validation. Block Ack baselines reflect transmitted-request deadlines, live token matching and peer/TID eligibility. Refresh the three blockack showcases, HCFfragblockack, txop/General and MacQosWithBlockAck on master 7287f34, which includes the corrected 20-byte BAR from 9a9e65c. The preceding checkpoint preserves master values. MacQosWithBlockAck records its intermediate trajectory here; the later A-MSDU policy fix owns its next transition. Non-Block-Ack graphical changes retain the accepted queue-counter updates: aggregate service dequeues members instead of removing them. The user approved these exact refreshed expectations after the 2026-09-15 attribution report. Scoped debug verification uses run 0 and all declared ingredients. Transaction and real RED/HCF tests cover terminal outcomes. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211 | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
A successful replacement ADDBA agreement must reset the recipient's reordering and receive state, while a duplicate request must not repeat that state transition. Preserve the response body for the matching retry and exercise successful and timed-out transactions in a focused example. Add the three MacQosWithTransactionalBlockAck expectations measured with the corrected BAR timing on rebased master 7287f34. This example first exists here, so its initial baseline belongs here. The six existing selected Block Ack cases preserve their preceding values. The transactional values remain stable through the final source checkpoint. The user approved these exact refreshed expectations after the 2026-09-15 attribution report. Scoped debug verification uses run 0 and all declared ingredients. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211 | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
A fragmented action body cannot be interpreted as a complete ADDBA or DELBA. Preserve action context while fragments are queued and retried, and dispatch management actions only after successful reassembly. Shared fragment reassembly now expires incomplete bodies after the configured receive lifetime (512 TUs by default); late bodies are discarded before dispatch. Six rows change (16 values) because incomplete fragment bodies now expire after 512 TUs instead of completing late. Extending only the diagnostic lifetime beyond the run duration restores all 24 preceding values in those rows; expiry tests establish the intended drop behavior. The user accepted these exact source-owned expectations on 2026-09-15. Validation: diagnostic debug and release builds; 9 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
A superseded AP management transaction must not leave queued siblings or continue a later frame exchange. Distinguish deferred cancellation from immediate abort so an already handed-down transmission keeps its owner until completion, and require explicit sequence-handler implementations. Validation: diagnostic debug and release builds; 10 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211 | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
A delayed or retried DELBA must not terminate a replacement agreement for the same peer and TID. Carry the sender-local generation through fragments and retries, and make acknowledged, aborted and cancelled teardown outcomes explicit. Validation: diagnostic debug and release builds; 10 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
The shared HCF inactivity timer must represent the earliest enabled agreement deadline and cancel when no agreement remains. Terminal queue callbacks can remove current or sibling agreements during expiry, so snapshot peer/TID/generation values and relookup them before each action. Direct mutation tests and real bounded-queue HCF expiry cover both roles. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
Late fragments and sequence reuse must not combine bodies from different generations. Keep reassembly identity and sequence-space decisions coherent across retries, duplicates and replacement receive state. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.add+change.fix | test whatsnew | pr-1148-resolve-audit-findings
Incomplete fragmented bodies must expire from their first reception even when Block Ack reordering delays delivery. Preserve receive lifetime across buffering and reject late fragments without delivering a hybrid or expired body. Ad-hoc MacQos run 1 changes three values. There are three extra receive drops and three fewer deliveries. A byte trace isolates one BasicBlockAck bitmap change after prevented late completion stops advancing old-sequence acknowledgment state. All packet times and lengths remain identical. The user accepted these exact source-owned expectations on 2026-09-15. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.add+change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
Retained teardown state is not an active data-plane agreement. Quarantine expired agreements, release their outstanding Block Ack frames, and relookup the original generation after the release callback before generating DELBA. Extend the expiry regression to replacement during frame release. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.add+change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
When a BAR releases data fragments that do not reassemble into a packet, recipient processing skips data dispatch instead of dereferencing a null result. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac.RecipientQosMacDataService | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
The timeout-policy ternary selected the wrong branch. A nonzero recipient policy overrides the advisory request timeout; the model's zero-policy convention inherits it. Cover both choices and the resulting inactivity deadlines independently of BAR handling. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac.RecipientBlockAckAgreementHandler | behavior.change.fix | test migration whatsnew | pr-1148-resolve-audit-findings
Basic A-MSDUs must fit the configured frame limit with subframe headers and padding, and cannot use this policy's ordinary fragmentation path. Treat -1 as an unlimited aggregation size while enforcing finite limits on the serialized body. Correct serialized padding changes aggregate selection; ordinary A-MSDU fragmentation is suppressed. Retain the accepted eight-row update and refresh MacQosWithBlockAck on rebased master 7287f34, which includes the corrected BAR timing. Among the seven selected Block Ack cases, only this row changes at this boundary. Its preceding intermediate value belongs to the originator ADDBA commit; this commit owns the final value. Tests cover exact padding bounds, unlimited size and A-MSDU versus ordinary-data fragmentation. The user approved these exact refreshed expectations after the 2026-09-15 attribution report. Scoped debug verification uses run 0 and all declared ingredients. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac | behavior.change.fix | fingerprint test migration whatsnew | pr-1148-resolve-audit-findings
Fragment bodies contain slices of the serialized management body, not repeated complete management headers. Preserve the body bytes through fragmentation and reassembly and keep transaction metadata with the fragments. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac.Fragmentation | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
Malformed peer association IDs are packet errors, not reasons to terminate the simulation. decodeAssociationId marks the header incorrect and the serializer regression checks the malformed cases. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mgmt.Ieee80211MgmtFrameSerializer | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
A successful ADDBA response supplies the recipient's A-MSDU support for this agreement. Retain that response bit rather than the request's initial capability so later aggregation obeys the negotiated agreement. Validation: diagnostic debug and release builds; 14 focused unit/module/queueing cases; 59 fingerprint ingredients with repeated moving candidates. Reconstructed commits receive the same applicable scoped checks before promotion. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: src.ieee80211.mac.OriginatorBlockAckAgreementHandler | behavior.change.fix | test whatsnew | pr-1148-resolve-audit-findings
Record the accepted baseline provenance, passing source-prefix and final verification, repaired findings, preserved checkpoints and scoped evidence limitations. Plan: plan/pending/pr-1148-resolve-audit-findings.md Change: plan | behavior.change | - | pr-1148-resolve-audit-findings
Move the completed plan without changing its content, preserving its history and the already verified source tree. Plan: plan/done/pr-1148-resolve-audit-findings.md Change: plan | location | - | pr-1148-resolve-audit-findings
With outstanding frames for two peers sharing a TID and sequence number, a BAR addressed to one peer marked both peers as waiting for Block Ack. The other peer then remained ineligible for retransmission or its own BAR, because response and timeout processing only updated the addressed peer. Filter ACK-status entries by the BAR receiver before applying the existing TID and sequence checks. Add a regression covering Basic and Compressed BARs with both response and timeout outcomes. Validation: debug build; peer-isolation regression fails before the fix and passes after it; existing ADDBA transaction test passes; both focused QoS Block Ack fingerprint cases pass with unchanged baselines. Scoped source seal and architecture checks pass. Change: src.ieee80211.mac.QosAckHandler | behavior.change.fix | test
The cancellation regression introduced by this topic accessed MIB fields that the new upstream makes private. Use its owner API so the test builds on the rebased branch. Continue release-note numbering after the upstream additions. Change: tests | behavior.change.fix | whatsnew
mgonzalezlopezudc
force-pushed
the
cleanup/fix-ieee80211-addba-transaction-minimal
branch
from
September 21, 2026 12:51
f7e8d8c to
a7352e1
Compare
This branch had an error being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Management frames can be queued, cancelled, retried, fragmented or dropped before their transaction completes. This series makes ADDBA transactions and Block Ack agreement teardown follow those outcomes. An unsent ADDBA rejected by RED retires without arming a response timer and releases same-TID data. A synchronous queue drop during inactivity expiry cannot invalidate traversal or tear down a replacement agreement.
Behavior and architectural surface
IPacketExtractorand the logicalpacketQueueDeparturesignal. Each queue boundary reports exactly one borrowed departure, including prequeue filter rejection, nested queues and shared-buffer eviction. Shared buffers detach affected packets before publishing notifications. HCF/DCF consume these contracts without depending on concrete RED or FIFO implementations.IManagementFrameTransactionHandler. Fragmented management bodies are reassembled before dispatch. Generation checks protect teardown, reassembly and agreement replacement from stale work.Ieee80211MgmtFrameSerializer::decodeAssociationId()marks malformed peer AIDs incorrect withmarkIncorrect(). The local teardown tag carriesgenerationId; role, peer and TID come from DELBA/context. These tags add no wire fields.Custom queue/buffer and MAC implementations must implement the new contract operations explicitly, including cancellation/abort, agreement release and reassembly purge obligations.
WHATSNEWanddoc/src/migration-guide/index.rstdocument the migration. Removal reason values remainDEQUEUED=0,REMOVED=1andDROPPED=2. Configuration changes cover ADDBA response timing/backoff, receive lifetime and the transactional Block Ack example. No source seals or new architectural exceptions are introduced.Commit reading order
The series contains 22 commits on master base
7287f347aaca36e557c708d6930a6f5a450b2833, ending atf7e8d8c5f2656c66c782838e883a0ac775a28c99. Generic queue contracts precede the MAC changes; the final source commit adds receiver isolation for BAR ACK state.BAR handling and timeout policy are independently reviewable fixes. Fingerprint updates accompany the source changes that cause them; inherited upstream drift is isolated in the first commit.
Fingerprint changes
Expectations are recorded in
tests/fingerprint/examples.csvandtests/fingerprint/showcases.csv. Baseline updates accompany their causal source commits.tyftokens are refreshed on the current base; the seven other previously accepted graphical updates are retained.MacQosWithTransactionalBlockAck, introduced with recipient renegotiation.0xffffto0x0004.Block Ack expectations on the current master
Master commit
9a9e65cbb5corrects Basic and Compressed BAR length from 38 to 20 bytes and fixes their wire encoding. Its transmission timing changes require fresh values for the topic's later Block Ack transitions. All six existing cases already match master's nonvisual expectations before the originator ADDBA change.tyfvalues forMacQosWithBlockAck,HCFfragblockackandtxop/General. Base, first-commit and pre-ADDBA runs reproduce the same values.blockack/NoFragmentation,blockack/Fragmentation,blockack/MixedTraffic,fragmentation/HCFfragblockack,txop/General, and the intermediateexamples/wireless/qos/MacQosWithBlockAckvalue.examples/wireless/qos/MacQosWithTransactionalBlockAckvalue.examples/wireless/qos/MacQosWithBlockAckvalue.The ordinary QoS Block Ack case records
5570-9d59/tplx;c521-a55d/~tNl;e5fc-a44c/~tNDat the originator commit and changes tof7c0-98c4/tplx;c808-a11f/~tNl;e5b6-5b54/~tNDat the A-MSDU policy commit. Keeping both transitions makes the intermediate commits pass independently.The approved correction changes seven CSV rows at head, including their three declared graphical ingredients. All source and non-baseline files remain identical to the corresponding pre-correction trees at every commit. The broader feature-series fingerprint coverage comprises 16 configuration/run rows with 59 ingredients; current-head revalidation below is scoped to the seven reported Block Ack cases.
Validation
Current head:
f7e8d8c5f2opp_replchecks: 149 case executions and 491 fingerprint ingredient checks. The six existing cases run at the first five commits; all seven run from the transactional example's introduction onward.tyf.The per-commit runs use
opp_repl --load @opp -p inet --external-command-log-level WARNwith a local harness that reads the selected tracked CSV rows, after each incremental build. Reproduce the final selected fingerprint check from the repository root with:All cases use run 0 and their CSV time limits: 1 s for blockack/fragmentation, 5 s for TXOP, 10 s for ordinary QoS Block Ack, and 3 s for transactional QoS.
Earlier feature validation
The completed feature-validation record in
plan/done/pr-1148-resolve-audit-findings.mdcovers the earlier base0c85e5dd6bc2969987286210962983b19384670eand head71d13ab60ec9c0cec3a62b2d6b013b98b43e7ccf. It records passing debug/release builds, 14 focused test files (five unit, six module and three queueing), all 59 fingerprint ingredients, and middle-commit originator, expiry and aggregation checks. These results establish the earlier feature-validation scope; the current-base checks are listed separately above.Commands recorded for that feature-validation build and focused test union:
Fingerprints ran in release mode through
opp_repl --load @opp --external-command-log-level WARN, using the retained local combined-ingredient harness and expectations from the tracked CSV files. All simulations completed and all 59 ingredients passed. This invocation requires the local harness; it is not a standalone fingerprint test command.Queueing-only and IEEE 802.11 with required dependencies also passed isolated debug builds. Each feature configuration used:
Commit, classification, source-seal and per-commit whitespace gates passed. Scoped queueing/Wi-Fi architecture and changed-file naming checks passed. At that earlier checkpoint, full-tree architecture, interface and naming checks recorded 25, 15 and 23 findings respectively, matching its pinned upstream with no new findings. Validation includes an implementation self-audit; these local results do not assert remote CI success or an independent review.
Scope remains single-link station/AP operation; this does not add MLO or EHT link negotiation. Dynamic fragmentation coverage is HE-only, and custom implementation migration was checked against in-tree users.